﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace FrbaBus.AbmCiudades
{
    public partial class FormAbmRol : Form
    {
        public int accion; // Accion = 1 --> UPDATE; Accion = 0 --> Alta

        public FormAbmRol()
        {
            InitializeComponent();
            //ver analista

            grillaRol.Columns.Add("ROL_CODIGO", "ROL_CODIGO");
            grillaRol.Columns.Add("ROL_NOMBRE", "ROL_NOMBRE");
            DataGridViewCheckBoxColumn colHab = new DataGridViewCheckBoxColumn();
            colHab.Name = "HABILITADO";
            grillaRol.Columns.Add(colHab);
            
            //Limpiar_Campos();
            //Cargar_Grilla_Funcionalidad(grillaFuncionalidad_F);
            Cargar_Grilla();

            frmDatos.Enabled = false;
            btnCancel.Enabled = false;
            btnSave.Enabled = false;

            this.FormClosed += FormRolesCerrado;
        }

        protected void FormRolesCerrado(object sender, EventArgs e)
        {
            this.Hide();

            FormLogueado form = new FormLogueado();
            form.ShowDialog(this);
        }

        private void Cargar_Grilla_Funcionalidad(DataGridView grilla)
        {
            string query;
            grilla.Rows.Clear();

            query = "SELECT DISTINCT(funci_codigo) AS Codigo, funci_nombre AS Nombre ";
            query += "FROM THE_BEST_IAS.funcionalidades ";
            query += " ORDER BY 1, 2 ";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    grilla.Rows.Add(new object[] { 
                           dr["Codigo"].ToString().Trim(), 
                           dr["Nombre"].ToString().Trim(), 
                           0
                        });
                }
            }
        }

        private void btnBaja_Click(object sender, EventArgs e)
        {

            if (grillaRol.SelectedRows[0].Cells[0].Value.ToString() != "")
            {
                string query;

                query = "UPDATE THE_BEST_IAS.roles ";
                query = query + "SET rol_habilitado = 0 ";
                query = query + "WHERE rol_codigo = " + grillaRol.SelectedRows[0].Cells[0].Value.ToString();

                DbHelper.ExecuteNonQuery(query);

                MessageBox.Show("El Rol: " + grillaRol.SelectedRows[0].Cells[1].Value.ToString() + " ha sido inhabilitado", "Informacion");

                Limpiar_Campos();
            }
            else
            {
              MessageBox.Show("Debe seleccionar un Rol.", "Informacion");
            }

            Cargar_Grilla();
        }

        private void btnAlta_Click(object sender, EventArgs e)
        {
            frmDatos.Enabled = true;
            frmFiltros.Enabled = false;
            btnAlta.Enabled = false;
            btnBaja.Enabled = false;
            btnBuscar.Enabled = false;
            btnModif.Enabled = false;
            btnSave.Enabled = true;
            btnCancel.Enabled = true;
            btnLimpiar.Enabled = false;

            string query;

            //Cargo las categorías padre
            query = "SELECT MAX(ISNULL(rol_codigo, 0)) + 1 AS Codigo ";
            query += "FROM THE_BEST_IAS.roles ";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    tbIdRol.Text = dr["Codigo"].ToString();
                }
            }
            dr.Close();

            accion = 0;
            Cargar_Grilla_Funcionalidad(grillaFuncionalidad);

            PonerCampos();
        }

        private void Cargar_Grilla()
        {
            grillaRol.Rows.Clear();
            //grillaRol.Columns.Clear();

            string query;
            string vFuncionalidad = "";
            Boolean haySeleccion = false;
            query= " SELECT rol_codigo, rol_nombre, rol_habilitado ";
            query += " FROM THE_BEST_IAS.roles ";
            query += " WHERE 1 = 1 ";

            if (tbNombre_F.Text.Trim() != string.Empty)
                query += " AND rol_nombre like '%" + tbNombre_F.Text.Trim().ToString() + "%'";
            if (chkTodasFuncionalidades.Checked == false)
            {
                foreach (DataGridViewRow row in grillaFuncionalidad_F.Rows)
                {
                    if (Convert.ToBoolean(row.Cells[2].Value) == true)
                    {
                        vFuncionalidad += " " + Convert.ToInt16(row.Cells[0].Value) + ", ";
                        haySeleccion = true;
                    }
                }
                
                if (haySeleccion)
                {
                    vFuncionalidad = vFuncionalidad.ToString().Remove(vFuncionalidad.Length - 2, 2);
                    query += " AND rol_codigo IN (SELECT DISTINCT(rol_codigo) FROM THE_BEST_IAS.rol_funcionalidades WHERE funci_codigo IN (" + vFuncionalidad + ") ";
                    query += " AND rofu_habilitado = 1 ) ";
                }
                else
                {
                    MessageBox.Show("Debe seleccionar al menos una funcionalidad (o todas!).", "Informacion");
                    return;
                }
            }
            
            query += " ORDER BY 1";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Boolean rolHabilitado;
                    if (Convert.ToInt16(dr["ROL_HABILITADO"]) == 1)
                        rolHabilitado = true;
                    else
                        rolHabilitado = false;

                    grillaRol.Rows.Add(new object[] { 
                           dr["ROL_CODIGO"].ToString().Trim(), 
                           dr["ROL_NOMBRE"].ToString().Trim(), 
                           rolHabilitado
                         });
                }
            }
            else
            {
                grillaRol.Columns.Add("ROL", "");
                grillaRol.Rows.Add(new object[] { "NO SE ENCONTRARON ROLES" });
            }
        }

        
        private void btnModif_Click(object sender, EventArgs e)
        {
            if (grillaRol.SelectedRows.Count > 0 && grillaRol.SelectedRows[0].Cells[0].Value != null)
            {
                accion = 1;

                frmDatos.Enabled = true;
                frmFiltros.Enabled = false;
                btnAlta.Enabled = false;
                btnBaja.Enabled = false;
                btnBuscar.Enabled = false;
                btnModif.Enabled = false;
                btnSave.Enabled = true;
                btnCancel.Enabled = true;
                btnLimpiar.Enabled = false;
                tbIdRol.Text = grillaRol.Rows[grillaRol.CurrentCell.RowIndex].Cells[0].Value.ToString();
                tbNombre.Text = grillaRol.Rows[grillaRol.CurrentCell.RowIndex].Cells[1].Value.ToString();
                chkHabilitado.Checked = Convert.ToBoolean(grillaRol.Rows[grillaRol.CurrentCell.RowIndex].Cells[2].Value.ToString());

                Cargar_Grilla_FuncionalidadRol();
                grillaFuncionalidad.Enabled = true;
                PonerCampos();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un elemento de la grilla.");
                return;
            }
        }

        private void Cargar_Grilla_FuncionalidadRol()
        {
            string query;
            grillaFuncionalidad.Rows.Clear();

            query = "SELECT DISTINCT(F.funci_codigo) AS Codigo, F.funci_nombre AS Nombre, RF.rofu_habilitado as Habilitado ";
            query += "FROM THE_BEST_IAS.rol_funcionalidades AS RF ";
            query += "LEFT JOIN THE_BEST_IAS.funcionalidades AS F ON RF.funci_codigo = F.funci_codigo ";
            query += "WHERE RF.rol_codigo = " + tbIdRol.Text +" ";
            query += " ORDER BY 1, 2 ";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Boolean rolHabilitado;
                    if (Convert.ToInt16(dr["Habilitado"]) == 1)
                        rolHabilitado = true;
                    else
                        rolHabilitado = false;

                    grillaFuncionalidad.Rows.Add(new object[] { 
                           dr["Codigo"].ToString().Trim(), 
                           dr["Nombre"].ToString().Trim(),
                           rolHabilitado
                        });
                }
            }
        }

        private void Limpiar_Campos()
        {
            tbNombre.Text = "";
            tbIdRol.Text = "";
            chkHabilitado.Checked = false;
            grillaFuncionalidad.Rows.Clear();

        }

        private void SacarCampos()
        {
            tbIdRol.Enabled = false;
            tbNombre.Enabled = false;
            chkHabilitado.Enabled = false;
            //grillaFuncionalidad.Enabled = false;
        }

        private void PonerCampos()
        {
            tbNombre.Enabled = true;
            chkHabilitado.Enabled = true;
            //grillaFuncionalidad.Enabled = true;   
        }

        private void tbNombre_F_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)39)
            {
                e.Handled = true;
            }
        }

        private void tbNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)39)
            {
                e.Handled = true;
            }
        }

        //private void Cargar_Combos()
        //{
        //    string query = "";

        //    query = "select funcion_codigo , funcion_nombre from funcionalidad order by 1";

        //     SqlDataReader dr = DbHelper.ExecuteQuery(query);

        //    if (dr.HasRows)
        //    {
        //        int i = 0;
        //        while (dr.Read())
        //        {
        //            cbFuncionalidades.Items.Insert(i, dr[0].ToString() + "-" + dr[1].ToString());
        //            cbFuncionalidades_F.Items.Insert(i, dr[0].ToString() + "-" + dr[1].ToString());
        //            i++;
        //        }
        //    }

        //    cbFuncionalidades.Items.Insert(0, "");
        //    cbFuncionalidades_F.Items.Insert(0, "");
        //}

        //private void grillaRol_SelectionChanged(object sender, EventArgs e)
        //{
        //    if (grillaRol.SelectedRows.Count > 0 && grillaRol.SelectedRows[0].Cells[0].Value != null)
        //    {
        //        tbNombre.Text = grillaRol.SelectedRows[0].Cells[1].Value.ToString();
        //        cbFuncionalidades.Text = grillaRol.SelectedRows[0].Cells[2].Value.ToString() + "-" + grillaRol.SelectedRows[0].Cells[3].Value.ToString();
        //    }
        //    else
        //    {
        //        Limpiar_Campos();
        //    }
        //}

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void chkTodasFuncionalidades_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTodasFuncionalidades.Checked == false)
            {
                grillaFuncionalidad_F.Enabled = true;
                Cargar_Grilla_Funcionalidad(grillaFuncionalidad_F);
                grillaFuncionalidad_F.Enabled = true;
            }else
            {
                grillaFuncionalidad_F.Rows.Clear();
                grillaFuncionalidad_F.Enabled = false;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            Cargar_Grilla();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            string query = "";
            if ((tbNombre.Text.Trim() != string.Empty))
            {
                if (accion == 1)
                {
                    // es un UPDATE
                    if (tbIdRol.ToString().Length == 0)
                    {
                        MessageBox.Show("Debe seleccionar un rol para modificar.", "Informacion");
                        return;
                    }

                    query = "UPDATE THE_BEST_IAS.roles ";
                    query += "SET Rol_Nombre = '" + tbNombre.Text.Trim() + "', ";
                    if (chkHabilitado.Checked == true)
                        query += "Rol_HABILITADO = 1 ";
                    else
                        query += "Rol_HABILITADO = 0 ";

                    query = query + "WHERE Rol_Codigo = " + tbIdRol.Text.Trim() + " ";
                    DbHelper.ExecuteNonQuery(query);


                    foreach (DataGridViewRow row in grillaFuncionalidad.Rows)
                    {
                        query = "UPDATE THE_BEST_IAS.rol_funcionalidades SET ";
                        query += "rofu_habilitado = " + Convert.ToInt16(row.Cells[2].Value) + " ";
                        query += "WHERE funci_codigo =  " + Convert.ToInt16(row.Cells[0].Value) + " ";
                        query += "AND rol_codigo =  " + tbIdRol.Text.Trim() + " ";
                        DbHelper.ExecuteNonQuery(query);
                    }

                    MessageBox.Show("Se Actualizó el ROL: " + tbNombre.Text.Trim(), "Informacion");

                }
                else
                {
                    // es un INSERT
                    query = "INSERT INTO THE_BEST_IAS.roles (rol_nombre, rol_habilitado) VALUES ";
                    query += " ('" + tbNombre.Text.Trim() + "', ";
                    if (chkHabilitado.Checked == true)
                        query += "1) ";
                    else
                        query += "0) ";

                    DbHelper.ExecuteNonQuery(query);

                    foreach (DataGridViewRow row in grillaFuncionalidad.Rows)
                    {
                        query = "INSERT INTO THE_BEST_IAS.rol_funcionalidades (rol_codigo, funci_codigo, rofu_habilitado) VALUES ";
                        query += "(" + tbIdRol.Text.Trim() + ", ";
                        query += " " + Convert.ToInt16(row.Cells[0].Value) + ", ";
                        query += " " + Convert.ToInt16(row.Cells[2].Value) + ") ";
                        DbHelper.ExecuteNonQuery(query);
                    }

                }

            }
            else
            {
                MessageBox.Show("Faltan datos, por favor, completarlos todos.", "Informacion");
                return;
            }

            frmFiltros.Enabled = true;
            frmDatos.Enabled = false;
            btnAlta.Enabled = true;
            btnBaja.Enabled = true;
            btnBuscar.Enabled = true;
            btnModif.Enabled = true;
            btnSave.Enabled = false;
            btnCancel.Enabled = false;
            btnLimpiar.Enabled = true;
            PonerCampos();
            Limpiar_Campos();
            Cargar_Grilla();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            Limpiar_Campos();

            frmFiltros.Enabled = true;
            frmDatos.Enabled = false;
            btnAlta.Enabled = true;
            btnBaja.Enabled = true;
            btnBuscar.Enabled = true;
            btnModif.Enabled = true;
            btnSave.Enabled = false;
            btnCancel.Enabled = false;
            btnLimpiar.Enabled = true;
            SacarCampos ();

            Cargar_Grilla();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            tbNombre_F.Text = "";
            chkTodasFuncionalidades.Checked = true;
            Cargar_Grilla();
            tbNombre_F.Focus();
        }
    }
}
